import urllib.request
import urllib.parse
import urllib
from bs4 import  BeautifulSoup
import re
import time

# 这个不是通用的游览方法，是看了易班网页代码做的，换了其他也要看情况来，主要就是提取文档，和正则表达式的使用，用这两个提取你想要的内容既可以


findLink = re.compile(r'<a class="start" href="(.*?)" target="_blank">') # 正则表达式

def getdata() : # 伪装chrom ， 构造请求头
    data = bytes(urllib.parse.urlencode({"": ""}), encoding="utf-8")
    header = { # 填写自己的cooki
        "Cookie": "",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}

    return  header , data

def webRuqest(url ) : #根据链接，访问页面 ， 同时返回response
    req = urllib.request.Request(url= url  , headers=getdata()[0],data= getdata()[1]   ,method= "GET")
    response = urllib.request.urlopen(req)
    return response



def getpageInformation(url , limti) :

    page_href_link = [] #页面中我们需要的链接

    for item in range( 1 , limti ) :

        url_list = url+ "?page=" + str(item) #拼接 url 访问页数

        resp = webRuqest(url_list) #获取response

        bs = BeautifulSoup(resp.read().decode("utf-8", 'ignore'), "html.parser")  #得到文档

        href_list = bs.select("a[class='start']")                                 #搜索需求链接

        for item_link in href_list :                                              #遍历链接

            link = re.findall(findLink, str(item_link))[0]                        #正则表达是提取链接

            page_href_link.append(link)                                           #装入访问列表

    return page_href_link

#弃用
def analysisPage(href_list) :
    page_href_link = []
    for item_link in href_list:
        link = re.findall(findLink, str(item_link))[0]
        page_href_link.append(link)

    return page_href_link

def startApplication(url , limti) :

    request_list=getpageInformation(url , limti)    #获取访问列表
    count = 0

    for link in request_list :  # 访问
        resp = webRuqest(link)
        time.sleep(2)
        print("访问成功")
        count+=1
    print("共计访问链接个数：",count)



def main() :


    # req=webRuqest("https://www.yooc.me/group/2194101/courses?page=1")
    # print(req.read().decode("utf-8", 'ignore'))

     startApplication("https://www.yooc.me/group/2194101/courses" ,  6 ) #启动 url 填写阅读课程的url


if __name__ == '__main__':
    main()